import mountElement from "./mountElement"
import updateComponent from './updateComponent'
/**
 * 组件比对
 * @param {*} virtualDOM 新的 virtualDOM
 * @param {*} oldComponent 旧的组件实例
 * @param {*} oldDOM 旧的 DOM 对象
 * @param {*} container 挂载的 DOM 节点
 */
export default function diffComponent (virtualDOM, oldComponent, oldDOM, container) {
  if (isSameComponent(virtualDOM, oldComponent)) {
    // 同一组件下
    updateComponent(virtualDOM, oldComponent, oldDOM, container)
  } else {
    // 不是同一组件
    // 直接渲染 virtualDOM 并替换旧的 DOM 对象
    mountElement(virtualDOM, container, oldDOM)
  }
}

/**
 * 判断是否为同一个组件
 * @param {*} virtualDOM 
 * @param {*} oldComponent 
 */
function isSameComponent (virtualDOM, oldComponent) {
  return oldComponent && virtualDOM.type === oldComponent.constructor
}